﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Noris.Tools.TraceVisualiser.Forms
{
    #region interface IFormStatusbar : předpis pro objekt, který dovoluje komunikovat se svým status barem
    /// <summary>
    /// interface IFormStatusbar : předpis pro objekt, který dovoluje komunikovat se svým status barem
    /// </summary>
    public interface IFormStatusbar
    {
        /// <summary>
        /// Touto metodou se do status baru vkládají potřebné texty / ikony / stav progress baru.
        /// </summary>
        /// <param name="item">Druh údaje</param>
        /// <param name="value">Vkládaná hodnota.
        /// Hodnota null typicky zhasne progress, vynuluje text + ikonu.
        /// Do textových prvků lze vložit String nebo Image.
        /// Do progresu lze vložit decimal nebo float číslo udávající poměr 0 až 1, anebo int jakožto počet procent 0 až 100.</param>
        void StatusBarSet(StatusBarItem item, object value);
    }
    /// <summary>
    /// Jednotlivé položky status baru, do kterých lze vkládat hodnotu
    /// </summary>
    public enum StatusBarItem
    {
        /// <summary>
        /// Žádná položka
        /// </summary>
        None = 0,
        /// <summary>
        /// Položka s ikonou
        /// </summary>
        Icon,
        /// <summary>
        /// Text s verzí
        /// </summary>
        Version,
        /// <summary>
        /// Ikona + hlavní text, největší prvek status baru
        /// </summary>
        MainText,
        /// <summary>
        /// Ikona + text o stavu (stav načítání, počet požadavků, atd)
        /// </summary>
        StatusText,
        /// <summary>
        /// Text o stavu paměti (ikona je napevno)
        /// </summary>
        MemoryText,
        /// <summary>
        /// Progress bar. Jako Value se předává decimal nebo float poměr v rozmezí 0 až 1, nebo int počet procent, nebo null pro zhasnutí.
        /// </summary>
        Progress
    }
    #endregion
}
namespace Noris.Tools.TraceVisualiser.Components
{
    /// <summary>
    /// Interface, který umožní objektu vyjádřit jeho názor na případné přenechání focusu
    /// </summary>
    internal interface ILeaveFocus
    {
        /// <summary>
        /// Property, která vyjadřuje, zda control může přenechat focus někomu jinému, kdo o to požádá
        /// </summary>
        bool CanLeaveFocus { get; }
        /// <summary>
        /// Metoda, po které si cizí control převezme focus
        /// </summary>
        void TakeAwayFocus();
    }
}
namespace Djs.Tools.XmlPersistor
{
    #region interface IXmlSerializer : dává objektu možnost serializovat / deserializovat se vlastními silami.
    /// <summary>
    /// IXmlSerializer : dává objektu možnost serializovat / deserializovat se vlastními silami.
    /// Interface předepisuje jednu property XmlSerialData { get; set; }, 
    /// která v GET accessoru vrátí svoji vlastní serializaci,
    /// a která v SET accessoru převezme serializovaný text a naplní se z něj.
    /// Pro konverzi jednoduchých typů lze použít statické metody třídy Djs.Tools.XmlPersistor.Convertor, které konvertují datový typ z/na string.
    /// </summary>
    public interface IXmlSerializer
    {
        string XmlSerialData { get; set; }
    }
    #endregion
}
namespace Noris.Tools.TraceVisualiser.Interface
{
    /// <summary>
    /// Prázdný interface, předek všech interface typu Plugin.
    /// Nepřináší žádnou povinnost, zajistí přednačtení služeb (typů) při startu systému.
    /// </summary>
    public interface IPlugin
    {
        /// <summary>
        /// Příznak, že Plugin je aktivní ve standardním běhu (tj. při běžném užiavtelském spuštění).
        /// Plně funkční pluginy tedy vrací true.
        /// Pluginy, které jsou ve vývoji, vrací false, takové jsou zobrazeny / spouštěny pouze v aplikaci, která běží v režimu Debug.
        /// </summary>
        bool Active { get; }
    }
    /// <summary>
    /// Interface, který předepisuje metodu Initialize().
    /// Využívá se tam, kde lze vytvářet objekty na základě jejich typu (System.Activator.CreateInstance()), a až následně po doběhnutí konstruktoru je inicializovat.
    /// </summary>
    public interface IInitialize
    {
        /// <summary>
        /// Metoda je volaná po vytvoření objektu.
        /// </summary>
        void Initialize();
    }
}

